#ifndef ABSTRACTDelegate_H
#define ABSTRACTDelegate_H

#include "Global_Signal.h"
#include <vector>

class AbstractSignal;

/*!
 *	\class AbstractDelegate()
 * 	\brief	Classe virtuelle pure utilisé uniquement dans le but de permettre le polymorphisme et ainsi de stocker plusieurs
 * 			objets de type Delegate différent dans un vector std
 */

class AbstractDelegate
{
    public:

        /*!
         * 	\fn virtual void Run()=0;
         * 	\brief	Méthode virtuelle pure utilisé pour représenter la méthode qui exécute la fonction Delegate
         */



    virtual void Run();

    template<class T>
     virtual  void Run(T arg)=0;

    template<class T, class U>
     virtual  void Run(T arg, U arg2)=0;

    template<class T, class U, class W>
     virtual  void Run(T arg, U arg2, W arg3)=0;
};




#endif // ABSTRACTDelegate_H
